import { useI18n, type Composer } from 'vue-i18n'

interface UseLocaleReturn {
  /**
   * 翻译函数
   */
  t: Composer['t']

  /**
   * 加载状态
   */
  loading: Ref<boolean>

  /**
   * 当前语言环境
   */
  locale: ComputedRef<string>

  /**
   * 可用的语言环境列表
   */
  availableLocales: ComputedRef<string[]>

  /**
   * 切换语言环境
   */
  changeLocale: (value: string) => Promise<void>
}

/**
 * @description: I18n 多语言切换
 * @return {UseLocaleReturn}
 */
export function useLocale(): UseLocaleReturn {
  const { locale, t, availableLocales, setLocaleMessage } = useI18n()
  const loading = ref(false)
  const a = 1

  // 切换语言
  const changeLocale = async (value: string) => {
    loading.value = true
    try {
      // 动态导入语言包
      const messages = await import(`../i18n/${value}/index.ts`)
      setLocaleMessage(value, messages.default)

      locale.value = value
      localStorage.setItem('locale', value)

      // 修改 HTML lang 属性
      document.querySelector('html')?.setAttribute('lang', value)
    } catch (error) {
      console.error('Failed to load locale:', error)
    } finally {
      loading.value = false
    }
  }

  return {
    t,
    loading,
    // 当前语言
    locale,
    // 支持的语言列表
    availableLocales,
    changeLocale
  }
}
